特定のVMマシンの削除を禁止させる(Google Cloud 拒否ポリシー)
概要
目的
タグに基づく拒否ポリシーを利用して、特定のフォルダ配下に存在するVMマシンの削除を特定のユーザーに対して禁止させます。IAM Conditionsの拒否ポリシーを利用するので「どのリソース階層で、どのユーザーの、どの権限を剥奪するか」を指定することで禁止を実現できます。
今回は「Test-Muroi-Folderで、yasunari××××@gmail.comの、compute.delete権限とcompute.update権限」を剥奪します。yasunari××××@gmail.comは、本来であればCompute管理者ロールを保有しているため、VMの削除とアップデートはできるはずです。
メリット
組織統一的なリソースを作成し、ユーザーにそのリソースを触らせたくない場合などに役立ちます。例えば、組織ポリシーでVMの外部IPの付与を禁止している代わりに、Proxyサーバーを個々のプロジェクトに一律にデプロイしている場合に、そのProxyサーバーの削除を禁止させることで、操作ミスによるインターネットとの通信に障害が出ることを防ぎます。
具体的流れ
今回の実演は以下のような流れで実施しました。
- 拒否ポリシーの作成に必要な権限の付与
- VMの作成時にタグを追加
- 拒否ポリシーを作成
- 拒否ポリシーの適応を確認
実演
1.必要な権限
拒否ポリシーを作成するには、組織に対して以下の権限が必要です。
- 拒否管理者
2.VMにタグの追加
予め組織単位で作成していたタグを新規VMの作成時に追加していきます。
- ADD TAGSを押下する
組織に存在するタグを利用します。
- 現在の組織を選択する
タグキーとタグの値をそれぞれ選択します。
- キー:vm-creator、値:ユーザーAのメールアドレス
3.拒否ポリシーの作成
IAMと管理から、IAMロールの付与画面に移動します。許可しないタブに移動し、+拒否ポリシーを作成を押下します。
リソースにはフォルダを指定し、拒否ポリシーの名前とIDを入力します。(配下全てのプロジェクトに適応させます)
- 名前、IDともに「deny-remove-vm」
新しい拒否ルールに拒否を適応させるユーザーと例外ユーザーを指定します。
- 拒否を適応させるユーザーをB、操作可能な例外ユーザーをA
どの権限を拒否するかを指定します。
- compute.googleapis.com/instances.delete、compute.googleapis.com/instances.updateを拒否する
拒否の条件を入力していきます。
拒否ルールが適用される条件を、タグや属性に基づいて設定していきます。
- 「vm-creator/ユーザーAのメールアドレス」 というタグに対して適応させる
作成を完了させると拒否ポリシーが作成されていることが確認できます。
4.拒否ポリシーの適応を確認
まず、yasunari××××@gmail.com(ユーザーA)に対して、Compute管理者ロールを割り当てます。これで、そのプロジェクトに存在するVMの操作は全般行えるはずです。
ユーザーBでVMの画面に移動し、先ほどの2.VMにタグの追加で利用したVMを削除してみようとしますが、削除の文字がグレーアウトされていることがわかります。
最後に、ユーザーAで削除できることも確認して、終了です。
まとめ
特定のリソースの操作を条件付きで禁止させるには、拒否ポリシーがおすすめです。基本的な制限は組織ポリシーで特定の条件を指定し、さらに細かい粒度で操作を制限させたい場合に検討してください。
参考